package com.wanggy.mystore.service;

import com.wanggy.mystore.entity.Address;

import java.util.List;

/**
 * 收货地址的业务层接口
 */
public interface IAddressService {
    /**
     * 这三个参数的由来：
     *  1.首先肯定要求address
     *  2.业务层需要根据uid查询该用户收货地址总数及新建收货地址是给字段uid值，但新建收货地址的表单中并
     *  没有哪个控件让用户输入uid，所以需要在控制层将uid传给业务层
     *  3.业务层在创建/修改收货地址时需要同事修改数据库中创建人/修改人的字段，但是新建收货地址的表单中
     *  并没有哪个控件让输入用户名username,所以需要控制层将username传给业务层
     *  注意：可以用HttpSession session替代Integer uid, String username，但是这样写的话就需要
     *  把BaseController类下获取uid，username的方法重新封装到一个类中并让IAddressServiceImpl实现
     *  类继承该类，这样就需要微调一下代码逻辑，太麻烦，并且，最好每一层只处理该层需要做的事情，session
     *  对象是控制层传递的，所以就把session对象定义封装在控制层中，不需要在业务层中额外处理以降低耦合
     */

    /**
     * 新增收货地址的抽象方法
     * @param uid 用户uid
     * @param username 用户username
     * @param address 收货地址数据
     */
    void addNewAddress(Integer uid, String username, Address address);

    /**
     * 根据用户的uid获取收货地址数据
     * @param uid 用户uid
     * @return 收货地址数据
     */
    List<Address> getByUid(Integer uid);

    /**
     * 修改某个用户的某条收货地址数据为默认收货地址
     * @param aid 收货地址aid
     * @param uid 用户uid
     * @param modifiedUser 修改执行人
     */
    void setDefault(Integer aid, Integer uid, String modifiedUser);


    /**
     * 根据aid删除收货地址数据
     * @param aid 收货地址aid
     * @param uid 用户aid
     * @param username 修改执行者
     */
    void deleteByAid(Integer aid, Integer uid, String username);
}
